From: Felix Fietkau Date: Thu, 21 Oct 2021 09:28:35 +0000 (+0200) Subject: wireless: fix handling vif attributes on reload with mode change X-Git-Url: http://git.openwrt.org/%22https:/collectd.org//%22%24PHP_SELF/%22https:/collectd.org/%22%24PHP_SELF?a=commitdiff_plain;h=f78bdec2ed5f4c83d2c93f422c8bd21b68b02517;p=project%2Fnetifd.git wireless: fix handling vif attributes on reload with mode change When switching from AP to station mode, some AP specific flags such as proxyarp could become sticky and lead to hairpin being enabled on the sta interface. Fix this by ensuring that vif fields are always properly rewritten Signed-off-by: Felix Fietkau --- diff --git a/wireless.c b/wireless.c index b26c4e8..bd847e7 100644 --- a/wireless.c +++ b/wireless.c @@ -804,20 +804,13 @@ wireless_interface_init_config(struct wireless_interface *vif) vif->network = cur; cur = tb[VIF_ATTR_MODE]; - if (cur) - vif->ap_mode = !strcmp(blobmsg_get_string(cur), "ap"); - - if (!vif->ap_mode) - return; + vif->ap_mode = cur && !strcmp(blobmsg_get_string(cur), "ap"); cur = tb[VIF_ATTR_ISOLATE]; - if (cur) - vif->isolate = blobmsg_get_bool(cur); + vif->isolate = vif->ap_mode && cur && blobmsg_get_bool(cur); cur = tb[VIF_ATTR_PROXYARP]; - if (cur) - vif->proxyarp = blobmsg_get_bool(cur); - + vif->proxyarp = vif->ap_mode && cur && blobmsg_get_bool(cur); } /* vlist update call for wireless interface list */ @@ -846,8 +839,6 @@ vif_update(struct vlist_tree *tree, struct vlist_node *node_new, wireless_interface_handle_link(vif_old, NULL, false); free(vif_old->config); vif_old->config = blob_memdup(vif_new->config); - vif_old->isolate = vif_new->isolate; - vif_old->ap_mode = vif_new->ap_mode; wireless_interface_init_config(vif_old); free(vif_new); } else if (vif_new) {